s = 0
'''
字典
字典类型是根据一个信息查找另一个信息的方式构成了【“键值对”】，它
表示索引用的键和对应的值构成的成对关系

 
字典索引没有整数的概念 ，而是用键来索引 
key: 2023 2024 2025
value: value1 value2 value3

索引也是可变数据类型
字典也是序列的一种，具有增删改一系列操作
不同：字典中的元素是无序的，底层使用了hash，第一个添加到字典的元素，在内存中并不一定排在第一位，字典中要求键必须唯一，不能重复，但是值可以重复
字典中的键要求是【不可变序列】：字符串、整数、浮点、元组，
列表不可以作为字典的键名

字典类型的创建方式：
1、使用{}直接创建
 d={key1:value1,key2:value2...}

2、使用内置函数dict()函数创建 
    ①通过映射函数创建字典
        zip()函数将两个序列压缩成一个元组序列，然后使用dict()函数将元组序列转换成字典
        比如：lst1=(10,20,30,40)  lst2=('cat','dog','zoo','pat')
            zip(lst1,lst2)  -->  [(10,'cat'),(20,'dog'),(30,'zoo'),(40,'pat')]
            相同索引的lst1的元素作为key，相同索引的lst2的元素作为value，创建字典
    
    ②直接使用dict()创建
        dict(key1=value1,key2=value2,...) 赋值运算符 
        

'''
# ①直接使用{}创建
d = {10: '你好吗', 20: '我很好', 30: '你呢', 20: '不行'}
print(d)  # 当key相同时，后面的覆盖前面的

# ②使用内置函数dict()创建
lst1 = (10, 20, 30, 40)
lst2 = ('cat', 'dog', 'zoo', 'pat')
zipobj = zip(lst1, lst2)
print(zipobj)  # <zip object at 0x000001E9D6D5F6C0> zip对象是一个迭代器，需要转化后，才可显示

# 使用list()转化为列表
# print(list(zipobj))  # [(10, 'cat'), (20, 'dog'), (30, 'zoo'), (40, 'pat')] 一次性使用zip对象

d = dict(zipobj)
print(d)  # {10: 'cat', 20: 'dog', 30: 'zoo', 40: 'pat'}
print('-' * 30)
# ③使用参数创建字典
d = dict(car=10, kk=11, dad=123123, )  # 左侧的car是key，后面的10是value
print(d)  # {'car': 10, 'kk': 11, 'dad': 123123}

# 元组当key
t = (10, 20, 30)
print({t: 10})

# 列表当key
# lst = [10, 20, 30]
# print({lst: 30})  # TypeError: unhashable type: 'list' 列表不可做为key
# 可变数据类型不可作为字典的key

# 字典属于序列
print('max', max(d))
print('min', min(d))
print('len', len(d))

# 字典的删除
del d
print(d)  # 删除后，报错NameError: name 'd' is not defined

# 字典中的key是无序的，python3.5及之前版本输出时无序，3.6之后python解释器做了处理的，输出时才会显得“有序”




